Conventional disk drives with magnetic media organize data in concentric tracks that are spaced apart. The concept of shingled writing is a form of magnetic recording and has been proposed as a way of increasing the areal density of magnetic recording. In shingle-written magnetic recording (SMR) media a region (band) of adjacent tracks are written so as to overlap one or more previously written tracks. The shingled tracks must be written in sequence unlike conventionally separated tracks, which can be written in any order. The tracks on an SMR disk surface are organized into a plurality of shingled regions (also called I-region) which can be written sequentially from an inner diameter (ID) to an outer diameter (OD) or from OD to ID. Once written in the shingled structure, an individual track or sector cannot be updated in place, because that would overwrite and destroy the overlapping tracks. Shingle-written data tracks, therefore, from the user's viewpoint are sometimes thought of like append-only logs. To improve the performance of SMR drives, a portion of the media is allocated to so-called “exception regions” (E-regions) which are used as staging areas for data which will ultimately be written to an I-region. The E-region is sometimes referred to as an E-cache.
Address indirection in the shingle-written storage device's internal architecture is useful to emulate existing host interfaces at least to some extent and shield the host from the complexities associated with SMR. Conventionally host file systems use logical block addresses (LBAs) in commands to read and write blocks of data without regard for actual locations (physical block address (PBA)) used internally by the storage device. Hard disk drives have had some level of LBA-PBA indirection for decades that, among other things, allows bad sectors on the disk to be remapped to good sectors that have been reserved for this purpose. Address indirection is typically implemented in the controller portion of the drive's architecture. The controller translates the LBAs in host commands to an internal physical address, or at least something closer to a physical address.
The conventional LBA-PBA mapping for defects does not need to be changed often. In contrast, in an SMR device the physical block address (PBA) of a logical block address (LBA) can change frequently depending on write-history. For example, each change in the content of an LBA generally requires that the LBA be assigned to a new PBA and background processes such as garbage collection move data sectors from one PBA to another but the LBA stays the same. The indirection system provides a dynamic translation layer between host LBAs and the current physical locations on the media. In a SMR system, the LBA-PBA mapping generally changes with every write operation because the system dynamically determines the physical location on the media where the host data for an LBA will be written. When an LBA-PBA in a shingled track is updated, the old PBA is marked as a hole for garbage collection.
ECC in disk drives is used to correct errors and erasures, which occur when a data element is missing or known to be faulty. Traditional ECC is performed on a sector basis using redundant bits appended to the sector data. These sector ECC approaches are not ideal for some disk drive applications such as streaming audio-video (AV) and the SMR architecture presents additional ECC problems. Accordingly special error correction code (ECC) strategies for have been described for AV applications and SMR drives. When an LBA-PBA (sector) in a shingled track is updated, the old PBA is marked as an erased sector (hole) for garbage collection. The problem addressed by the invention described herein is the recovery of “squeezed” sectors in a Shingled Magnetic Recording (SMR)-System in a way that permits the replacement of an arbitrary number of erased sectors within a track.
US patent application 20110075292 by Richard New, et al. (Mar. 31, 2011) describes SMR drives in which band establishes a respective segment in a log-structured file system. Large error correction (ECC) block sizes within each segment (band) are implemented by storing the intermediate ECC parity state after each partial write of an ECC block. In this case, the ECC block size spans multiple physical sectors, and because of the larger ECC block size the error correction code is more efficient and able to correct larger defect errors on the disk. The ECC code may be implemented in a number of different ways which are known to those skilled in the art of designing ECC codes.
U.S. Pat. No. 7,490,212 to Kasiraj, et al. (Feb. 10, 2009) describes ECC for an SMR drive that is useful for recording and playback of video data in transaction data blocks larger than the conventional 512 byte block size but smaller than the band size. Large physical sectors can be used to improve format efficiency, and large ECC codeword sizes (larger than the transaction block size) can be used to improve reliability without imposing a read-modify-write performance on the system. To do this, the disk drive saves the cumulative ECC parity state between successive partial writes of each transaction block so that the parity computed in a first write operation is used to generate the parity for a subsequent write operation. For example, a transaction block size might be one megabyte, and the ECC might span the entire band. Each time a transaction block is written, gradually filling up the band, the cumulative parity state for the ECC is maintained, so that at the end of the last transaction block in that band, the ECC parity can be written out. This provides a very long ECC block size and therefore a very efficient ECC code which is resilient to defects and errors. The ECC code could be very simple, such as a single parity sector computed by XORing all of the data in the physical sectors in the band. This provides protection against a single sector failure within the band. However, using XORing the error correction block is a parity sector that can only correct one data block and is not scalable.
Published patent application 20110096828 (Apr. 28, 2011) by Ying Chen, et al. describes a system with encoding and decoding blocks with multiple independent scalability layers. The FEC is assumed to be applied to a “block” or “fragment” of data at a time, i.e., a “block” is a “source block” for FEC encoding and decoding purposes. A client device can use the segment indexing described herein to help to determine the source block structure of a segment. The FEC codes considered for use with block-request streaming are typically systematic FEC codes, i.e., the source symbols of the source block may be included as part of the encoding of the source block and thus the source symbols are transmitted. A systematic FEC encoder generates, from a source block of source symbols, some number of repair symbols and the combination of at least some of the source and repair symbols are the encoded symbols that are sent over the channel representing the source block. Some FEC codes may be useful for efficiently generating as many repair symbols as needed, such as “information additive codes” or “fountain codes” and examples of these codes include “chain reaction codes” and “multi-stage chain reaction codes”. Other FEC codes such, as Reed-Solomon codes may practically only generate a limited number of repair symbols for each source block.